using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/5/2013 11:37:37 AM
    /// </summary>
    [Serializable]
    public class TareaLista : ReadOnlyListBase<TareaLista, TareaInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(TareaLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static TareaLista GetTareaLista(ModuloCriteria filter)
        {
            return DataPortal.Fetch<TareaLista>(filter);
        }

        private TareaLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(ModuloCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_id", criteria.Id),
                        new Parametro("ec_tabla", criteria.Modulo)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_TAREAS\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(TareaInfo.GetTareaInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/5/2013 11:37:37 AM
    /// </summary>
    [Serializable]
    public class TareaInfo : ReadOnlyBase<TareaInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public Guid JefeId { get; internal set; }
        public Guid TecnicoId { get; internal set; }
        public Guid FaseLicenciaminentoId { get; internal set; }
        public Guid FaseAuditoriaId { get; internal set; }
        public string Fase { get; internal set; }

        public string PersonaTecnioId { get; internal set; }
        public string Tecnico { get; internal set; }
        public string Jefe { get; internal set; }
        public string Asunto { get; internal set; }
        public string Descripcion { get; internal set; }
        public DateTime FechaInicio { get; internal set; }
        public DateTime FechaFin { get; internal set; }
        public string Responsable { get; internal set; }
        
        public Boolean Prorroga {
            get
            {
                DateTime fecha = DateTime.Today;
                if ((fecha >= FechaInicio) && (fecha <= FechaFin))
                {
                    return true;

                }
                return false;
            }
        }
        #endregion

        #region Factory Methods

        internal static TareaInfo GetTareaInfo(DataRow childData)
        {
            return DataPortal.FetchChild<TareaInfo>(childData);
        }

        private TareaInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            //               
            Id = Guid.Parse(childData["tar_id"].ToString());
            JefeId = Guid.Parse(childData["jed_id"].ToString());
            TecnicoId = Guid.Parse(childData["tec_id"].ToString());
            if (childData.Table.Columns.Contains("fal_id"))
                FaseLicenciaminentoId = Guid.Parse(childData["fal_id"].ToString());
            if (childData.Table.Columns.Contains("fac_id"))
                FaseAuditoriaId = Guid.Parse(childData["fac_id"].ToString());            
            if (childData.Table.Columns.Contains("fas_nombre"))
                Fase = childData["fas_nombre"].ToString();
            Tecnico = childData["stecnico"].ToString();
            Jefe = childData["sjefe"].ToString();
            Asunto = childData["tar_asunto"].ToString();
            Descripcion = childData["tar_descripcion"].ToString();
            FechaInicio = DateTime.Parse(childData["tar_fecha_inicio"].ToString());
            FechaFin = DateTime.Parse(childData["tar_fecha_fin"].ToString());
            Responsable = childData["tar_responsable"].ToString();
            if (childData.Table.Columns.Contains("per_id"))
                PersonaTecnioId = childData["per_id"].ToString();
        }

        #endregion
    }

  
}
